<?php
/**
 * Author: 孙武 QQ:1228746736
 * Date: 2018/1/8
 * Time: 20:45
 */

/*
 * 没有类没有时自动调用__autoload,有的时候不调用
 *
 * 项目中不能有多个__augoload
 * 如果spl_auto_load存在,那么__autoload自动失效
 * spl_auto_load按顺序进行加载
 * 当使用的时候,判断当前类是否是当前模块所需要的,再加载
 *
 * 自动加载考虑方面:
 * 1,可以确定的类,核心类(用数组,类名对应类文件地址)
 * 2,不可以确定的扩展类(  )
 */


//1 编写自动加载函数
/**
 * 样例
 * @param $class_name
 */
function autoloadExample($class_name)
{
    //定义框架核心文件数组
    $framework_class_list = [
        'controller' => './framework/controller.class.php',
        'model' => './framework/model.class.php'
    ];

    if (isset($framework_class_list[$class_name])) {

        //如果是系统核心文件自动加载
        require_once "$framework_class_list[$class_name]";
    } elseif (substr($class_name, -10) == 'controller') {

        //如果是控制器则自动加载
        include './application/controller/' . $class_name . "class.php";
    } elseif (substr($class_name, -10) == 'model') {

        //如果是模型类则自动加载
        include './application/model/' . $class_name . "class.php";
    }
}
//2 注册自动加载函数
spl_autoload_register('autoloadExample');




//text
class animal
{

}

class psr extends animal
{
    private $name = 'sunwu';
}

$sunwu = new psr();
var_dump($sunwu);

function __autoload($class)
{
    echo "autoload:" . $class;
}


/**
 * 用法
 * 判断类是否是当前模块
 */

function userAutoload($class_name)
{

    require_once '';
}

spl_autoload_register('userAutoload');

function myAutoload($class_name)
{
    require '';
}

spl_autoload_register('myAutoload');
//按顺序加载,限价在userAutoload,再加载myAutoload